package hr.ctg.service.dao;

import hr.ctg.domain.model.Drzava;
import hr.ctg.domain.model.Jezik;
import hr.ctg.domain.model.Mjesto;
import hr.ctg.domain.model.Opis;
import hr.ctg.domain.model.Otok;
import hr.ctg.domain.model.Park;
import hr.ctg.domain.model.Zupanija;
import hr.jpa.dao.GenericDAOImpl;

import java.util.List;

import javax.persistence.NoResultException;

import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;

@AutoCreate
@Name("opisDAO")
public class OpisDAO extends GenericDAOImpl<Opis, Integer> {
	@SuppressWarnings("unchecked")
	public List<Opis> findByWikiNotNullJezik(final Jezik jezik) {
		return entityManager.createNamedQuery("Opis.findByWikiNotNullJezik")
				.setParameter(1, jezik).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Opis> findByWikiJezik(String wiki, final Jezik jezik) {
		return entityManager.createNamedQuery("Opis.findByWikiJezik")
				.setParameter(1, wiki).setParameter(2, jezik).getResultList();
	}

	public Opis findByMjestoOznaka(final Mjesto mjesto, final String oznaka) {
		try {
			return (Opis) entityManager.createNamedQuery(
					"Opis.findByMjestoOznaka").setParameter(1, mjesto)
					.setParameter(2, oznaka).getSingleResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	public Opis findByOtokOznaka(final Otok otok, final String oznaka) {
		try {
			return (Opis) entityManager.createNamedQuery(
					"Opis.findByOtokOznaka").setParameter(1, otok)
					.setParameter(2, oznaka).getSingleResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	public Opis findByZupanijaOznaka(final Zupanija zupanija,
			final String oznaka) {
		try {
			return (Opis) entityManager.createNamedQuery(
					"Opis.findByZupanijaOznaka").setParameter(1, zupanija)
					.setParameter(2, oznaka).getSingleResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	public Opis findByDrzavaOznaka(final Drzava drzava, final String oznaka) {
		try {
			return (Opis) entityManager.createNamedQuery(
					"Opis.findByDrzavaOznaka").setParameter(1, drzava)
					.setParameter(2, oznaka).getSingleResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	public Opis findByParkOznaka(final Park park, final String oznaka) {
		try {
			return (Opis) entityManager.createNamedQuery(
					"Opis.findByParkOznaka").setParameter(1, park)
					.setParameter(2, oznaka).getSingleResult();
		} catch (final NoResultException e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Opis> findByIdObjekta(final int idObjekta) {
		return entityManager.createNamedQuery("Opis.findByIdObjekta")
				.setParameter(1, idObjekta).getResultList();
	}
}